home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / byteibm.arc / CLAFF.ARC / LISTING4.DOC < prev   
Text File  |  1985-07-12  |  2KB  |  130 lines

  1.  
  2. ;=======VECTOR STRUCTURE
  3. VECTOR    STRUC
  4. REGIP    DW    ?
  5. REGCS    DW    ?
  6. VECTOR    ENDS
  7. ;=======PSP SEGMENT
  8. PSP    SEGMENT    AT 0FFFFH
  9. ; PROGRAM SEGMENT PREFIX
  10.     INCLUDE    PSP.INC
  11. PSP    ENDS
  12. ;=======DATA SEGMENT
  13. DATA    SEGMENT    PUBLIC 'DATA'
  14.     EXTRN    CLKDIV:WORD
  15.     EXTRN    CLKRTN:WORD
  16. COL    DB    0    ;COLUMN
  17. DIR    DB    1    ;DIRECTION
  18. LEFT    DB    ?    ;NUMBER LEFT
  19. COLS    DB    ?    ;LAST COLUMN (0 RELATIVE)
  20. SPEED    DW    1000000000000000B     ;SPEED MASK
  21. DEEPS    DW    0000000000000001B     ;BACKWARDS!
  22. DATA    ENDS
  23. ;=======STACK SEGMENT
  24. STACK    SEGMENT    STACK 'STACK'
  25.     DW    128 DUP(?)
  26. STACK    ENDS
  27. ;=======CODE SEGMENT
  28. CODE    SEGMENT    PUBLIC 'CODE'
  29.     ASSUME    CS:CODE,DS:PSP,ES:PSP,SS:STACK
  30.     EXTRN    CLKEPI:NEAR
  31.     EXTRN    CLKPRO:NEAR
  32. DOSCALL    VECTOR    <>    ;WILL POINT TO
  33.                         ;  PSP:DOS_CALL
  34.  
  35. SEGCODE    DW    CODE    ;CODE SEGMENT
  36.     PUBLIC    SEGCODE
  37. SEGDATA    DW    DATA    ;DATA SEGMENT
  38.     PUBLIC    SEGDATA
  39. IP    LABEL    NEAR    ;EXECUTION STARTS HERE
  40.  
  41. ;-------SETUP DOSCALL VECTOR
  42.     MOV    DOSCALL.REGIP,OFFSET DOS_CALL
  43.     MOV    DOSCALL.REGCS,DS
  44. ;-------SETUP DS AND ES REGISTERS
  45.     MOV    ES,SEGDATA
  46.     ASSUME    ES:DATA
  47.     MOV    DS,SEGDATA
  48.     ASSUME    DS:DATA
  49. ;-------DETERMINE LAST COLUMN
  50.     MOV    AH,00FH
  51.     INT    010H
  52.     DEC    AH
  53.     MOV    COLS,AH
  54.     MOV    LEFT,AH
  55. ;-------INITIALIZE CLK MODULE
  56.     CALL    CLKPRO
  57. ;-------SET CLOCK ROUTINE
  58.     MOV    CLKRTN,OFFSET INT08
  59.     JMP    SHORT SETRATE
  60. MAINX    LABEL    NEAR
  61.     CALL    CLKEPI   ;DEINSTALL CLK MODULE
  62. ;-------RETURN TO DOS
  63.     MOV    AH,000H
  64.     CALL    DOSCALL
  65. ;-------SET CLK RATE
  66. SETRATE    LABEL    NEAR
  67.     MOV    AX,SPEED
  68.     OR    AX,DEEPS
  69.     AND    AX,1111111100000000B
  70.     SHL    AX,1
  71.     MOV    CLKDIV,AX
  72. ;-------WAIT FOR KEYSTROKE
  73. KEY    LABEL    NEAR
  74.     MOV    AH,0
  75.     INT    016H
  76.     CMP    AL,01BH
  77.     JE    MAINX        ;EXIT ON ESCAPE
  78.     ROR    SPEED,1        ;OTHERWISE,
  79.     ROL    DEEPS,1        ; CHANGE SPEED
  80.     JMP    SETRATE
  81. ;*******INTERRUPT ROUTINE
  82.     ASSUME    CS:CODE,DS:DATA,ES:DATA,SS:NOTHING
  83. ; NEAR PROC CALLED BY INT08
  84. INT08    PROC    NEAR    
  85.     PUSH    AX
  86.     PUSH    BX
  87.     PUSH    CX
  88.     PUSH    DX
  89.     PUSH    BP
  90.     PUSH    SI
  91.     PUSH    DI
  92. ;-------POSITION CURSOR
  93.     MOV    AH,002H
  94.     MOV    BH,0
  95.     MOV    DH,0
  96.     MOV    DL,COL
  97.     INT    010H
  98. ;-------DERIVE CHARACTER FROM TIME OF DAY
  99.     MOV    AH,0
  100.     INT    01AH
  101.     MOV    AL,DL
  102.     AND    AL,00111111B
  103.     ADD    AL,' '
  104. ;-------PUT CHARACTER ON THE SCREEN
  105.     MOV    AH,00AH
  106.     MOV    BH,0
  107.     MOV    CX,1
  108.     INT    010H
  109. ;-------UPDATE COLUMN
  110.     MOV    AL,DIR
  111.     ADD    COL,AL
  112.     DEC    LEFT
  113.     JNZ    SHOWX
  114.     NEG    DIR
  115.     MOV    AL,COLS
  116.     MOV    LEFT,AL
  117. SHOWX    LABEL    NEAR
  118.     POP    DI
  119.     POP    SI
  120.     POP    BP
  121.     POP    DX
  122.     POP    CX
  123.     POP    BX
  124.     POP    AX
  125.     RET
  126. INT08    ENDP
  127. CODE    ENDS
  128.     END    IP
  129.  
  130.